package com.wj.ballcat.demo.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.tangzc.mpe.actable.annotation.Column;
import com.tangzc.mpe.actable.annotation.ColumnComment;
import com.tangzc.mpe.actable.annotation.Table;
import com.tangzc.mpe.actable.annotation.constants.MySqlTypeConstant;
import com.tangzc.mpe.annotation.*;
import com.tangzc.mpe.base.BaseLogicEntity;
import com.tangzc.mpe.condition.metadata.annotation.DynamicCondition;
import com.wj.ballcat.demo.enums.ActicleStatusEnum;
import com.wj.ballcat.demo.handler.CurrentUserDynamicConditionHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * 如果本地已经实现了com.baomidou.mybatisplus.core.handlers.MetaObjectHandler，
 * 将会导致MPE框架的com.tangzc.mpe.base.AutoFillMetaObjectHandler无法生效，
 * 进而将会产生@InsertOptionDate、@InsertOptionUser、@InsertUpdateOptionDate、@InsertUpdateOptionUser、@DefaultValue...等注解无法工作的情况，请注意！
 */

@Data
@Accessors(chain = true)
@Table(comment = "文章")
public class Article extends BaseLogicEntity<String, LocalDateTime> {

	// 字符串类型的ID，默认也是雪花算法的一串数字（MP的默认功能）
	@ColumnComment("主键")
	@TableId(type = IdType.ASSIGN_ID)
	@Schema(title = "ID")
	private String id;

	@ColumnComment("标题")
	private String title;

	@Column(comment = "内容", type = MySqlTypeConstant.MEDIUMTEXT)
	private String content;

	// 新增字段
	@ColumnComment("审核: 0 不通过、1 通过")
	private int audit;

	// 默认值用法：文章默认激活状态，ACTIVE为ActicleStatusEnum[ACTIVE, INACTIVE]的枚举名称字符串
	@DefaultValue("ACTIVE")
	@ColumnComment("内容")
	private ActicleStatusEnum status;

	@ColumnComment("发布时间")
	// 【插入】数据时候会自动获取系统当前时间赋值，支持多种数据类型，具体可参考@OptionDate注解详细介绍（注意，这里的时间是MP执行insert的操作的时候的时间，并不是对象构建时候的时间）
	@InsertOptionDate
	private Date publishedTime;

	@ColumnComment("发布人")
	// 【插入】的时候，自动填充用户id，UserIdAutoFillHandler看下面代码
//	@InsertOptionUser(UserIdAutoFillHandler.class)
	@DynamicCondition(CurrentUserDynamicConditionHandler.class)
	private String publishedUserId;

	@ColumnComment("发布人名字")
	// 【插入】的时候，自动填充用户名字，UsernameAutoFillHandler看下面代码
//	@InsertOptionUser(UsernameAutoFillHandler.class)
	private String publishedUsername;

	@ColumnComment("最后更新时间")
	// 【插入和更新】数据时候会自动获取系统当前时间赋值，支持多种数据类型，具体可参考@OptionDate注解详细介绍
	@InsertUpdateOptionDate
	private Date publishedUpdateTime;

	@ColumnComment("最后更新人")
	// 【更新】的时候，自动填充用户id，UserIdAutoFillHandler看下面代码
	// @UpdateOptionUser(UserIdAutoFillHandler.class)
	// 【插入和更新】的时候，自动填充用户id，UserIdAutoFillHandler看下面代码
//	@InsertUpdateOptionUser(UserIdAutoFillHandler.class)
	private String publishedUpdateUserId;

	@ColumnComment("最后更新人名字")
	// 【更新】的时候，自动填充用户名字，UsernameAutoFillHandler看下面代码
	// @UpdateOptionUser(UsernameAutoFillHandler.class)
	// 【插入和更新】的时候，自动填充用户名字，UsernameAutoFillHandler看下面代码
//	@InsertUpdateOptionUser(UsernameAutoFillHandler.class)
	private String publishedUpdateUsername;
}
